#include "mainwindow.h"

#include <QApplication>

#include <QDebug>



#include <boost/property_tree/ptree.hpp>
#include <boost/property_tree/xml_parser.hpp>
#include <boost/foreach.hpp>
#include <string>
#include <set>
#include <exception>
#include <iostream>
namespace pt = boost::property_tree;

struct debug_settings
{
    std::string m_file;               // log filename
    int m_level;                      // debug level
    std::set<std::string> m_modules;  // modules where logging is enabled
    void load(const std::string &filename);
    void save(const std::string &filename);
};

void debug_settings::load(const std::string &filename)
{

    pt::ptree tree;
    pt::read_xml(filename, tree);
    auto root=tree.get_child("school");

{
    //一，
    //该节点叫做tea，下面有个tea
    auto a=root.get_child("tea.tea").data();
    qDebug()<<"tea"<<QString::fromStdString(a);
}

{
     //二，
     //该节点叫做stu，下面有个stu1,stu2,stu3,演示遍历该节点
   auto stu=root.get_child("stu");
   for(auto it = stu.begin() ; it != stu.end() ; it++)
   {
       qDebug() << QString::fromStdString(it->first.data()) << QString::fromStdString(it->second.data());
   }

   //二，1
    //该节点叫做stu，下面有个stu1,stu2,stu3,演示读节点单个内容
   auto c=stu.get_child("stu1").data();
   qDebug()<<"stu1"<<QString::fromStdString(c);

   auto c22=stu.get_child("stu2").data();
   qDebug()<<"stu2"<<QString::fromStdString(c22);
}



}

void debug_settings::save(const std::string &filename)
{

    pt::ptree tree_root;

    pt::ptree tea;
    tea.add<int>("tea",66);
    tree_root.add_child("school.tea",tea);

    pt::ptree stu;
    stu.add<int>("stu1",111);
    stu.add<int>("stu2",111222);
    stu.add<int>("stu3",111222);
    stu.add<int>("stu4",111222);
    tree_root.add_child("school.stu",stu);

    pt::write_xml(filename, tree_root);
}

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();

    try
      {
          debug_settings ds;

          ds.save("debug_settings_out.xml");
          ds.load("debug_settings_out.xml");
          std::cout << "Success\n";
      }
      catch (std::exception &e)
      {
          std::cout << "Error: " << e.what() << "\n";
      }
    return a.exec();
}
